Saltar para o conteúdo

Protótipo de função

Origem: Wikipédia, a enciclopédia livre.

Um protótipo de função ou declaração de função, nas linguagens de programação C e C++, é uma declaração de uma função que omite o corpo mas especifica o seu nome, aridade, tipos de argumentos e tipo de retorno. Um protótipo de função pode ser entendido como a especificação da sua interface.

A definição da função, em contrapartida, é a estrutura que além de conter a as informações de interface aqui descritas, possui o corpo onde é especificado o que a função realiza, O conceito de protótipo de função foi proposto originalmente na linguagem C++ e foi adotado posteriormente no padrão ANSI C da linguagem C.[1][2]

Como um exemplo, pode-se considerar o seguinte protótipo de função:

int fac(int n);

Este protótipo especifica que neste programa, existe uma função de nome "fac" que utiliza um único parâmetro "n" que está declarado como tipo inteiro "int". A definição da função precisa ser disponibilizada para que a função possa ser utilizada.

Informando o compilador

[editar | editar código-fonte]

Se a função não for declarada previamente e o seu nome ocorre em alguma expressão seguida de um parêntese ("( "), ela é declarada implicitamente como uma função sem nenhum argumento que retorna um int. Neste caso, quando a função é aplicada a algum argumento, o compilador não será capaz de realizar uma verificação, em tempo de compilação, dos tipos dos argumentos e da aridade. A impossibilidade de verificar o uso correto de uma função comumente implica a ocorrência de erros.

#include <stdio.h>
/*
 * Se o protótipo é disponibilizado, o compilador irá detectar o erro
 * na função main(). Se ele é omitido, o erro não será notificado.
 */
int fac(int n);              /* Protótipo da função "fac" */
int main()                   /* Chamada da função "main" */
{
    printf("%d\n", fac());   /* ERRO: falta um argumento na chamada de "fac" */
    return 0;
}
/*
 * Definição da função "fac"
 */
int fac(int n)               /* Chamada da função "fac" */
{
    if (n == 0) {
        return 1;
    }
    else {
        return n * fac(n - 1);
    }
}

A função "fac" espera que um argumento inteiro esteja na sua pilha de execução quando é chamada. Se o protótipo é omitido, o compilador não terá como garantir a presença do argumento e a função "fac" acabará operando sobre algum outro dado existente na pilha (possivelmente um código de retorno) ou um valor de alguma variável que não está no escopo corrente. Incluindo o protótipo da função, o programador informa ao compilador que a função "fac" obtém um inteiro como argumento e permite que o compilador avise a ocorrência desse tipo de erro.

Criação de interfaces de biblioteca

[editar | editar código-fonte]

Através da utilização de protótipos de função em arquivos de cabeçalho (normalmente, em programas escritos na linguagem C, em arquivos com a extensão ".h") é possível especificar interfaces para bibliotecas de software.

Declarações de classe

[editar | editar código-fonte]

Na linguagem C++, os protótipos de função são também utilizados em declarações de classe.

Referências

  1. Peter Stephenson. «C++ versus C - Function Prototypes» (em inglês). Consultado em 11 de julho de 2007 
  2. Ian Foster. «CC++ Introduction» (em inglês). Consultado em 11 de julho de 2007